<?php
/**
 * Контроллер раздела страниц административной панели
 * 
 * Страницы можно забиндить к любому контроллеру, достаточно создать контроллер, расширяющий Phorm_Controller_Module_Control_Page
 * Имена контроллеров для бекенда и фронтенда должны совпадать
 * 
 * @category Phorm
 * @package Controller_Module_Control
 * @name /Phorm/Controller/Module/Control/Page.php
 * @copyright phorm.ru
 * @since 19.09.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Control_Page extends Phorm_Controller_Controller {
	
	/**
	 * Экземпляр класса страниц
	 * @var Phorm_Page
	 */
	public $Page;
	
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
		
	public function preDispatch() {
		
		$this->Page = new Phorm_Page();
		
	}
	
	/**
	 * Список страниц
	 * 
	 * @return void
	 */
		
	public function indexAction() {
		
		$grid_options = Phorm_Config::xml('grids/control/page.xml', 'index');
		
		/**
		 * Перезагрузка меню геообъектов
		 */
		
		if($this->_request->isXmlHttpRequest() && isset($this->_params['pageid'])) {
				
			$this->view->setEscape('trim');
			$Menu = $this->view->navigation()->menu($this->Page->getNavigationMenu($this->_params['pageid']))->render();
			die($Menu);
			
		/**
		 * Данные для Grida
		 */
		
		} elseif($this->_request->isXmlHttpRequest()) {
		
			$rows = $this->Page->getPageList($this->_params);
			$paginator = $this->Page->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$grid_options));
			return true;
			
		} 
		
		/**
		 * JS для обновления меню
		 */
		
		if(isset($this->_params['tree']) && $this->_params['tree']=='reload' && isset($this->_params['pageid'])) {
			
			$js = 'window.parent.trees.page.' . $this->_params['controller'] . '.reload(\''.$this->view->siteUrl().'/control/' . $this->_params['controller'] . '/?pageid=' . $this->_params['pageid'] . '\');';
			$this->_boot->jquery->addOnload($js);
			
		}
		
		/**
		 * Grid
		 */
			
		$this->view->assign('PagesDataTable',$this->view->DataGrid('PagesDataTable',$grid_options));
		
	}
	
	/**
	 * Создание страницы
	 * 
	 * @return void
	 */
		
	public function addAction() {

		$form = $this->Page->getPageForm('add');
				
		if($this->_request->isPost()) {
			
			if($form->isValid($this->_request->getPost()) && $data = $this->Page->savePageForm($form)) {
				return $this->composeSuccessMessage('Страница создана', '/control/' . $this->_params['controller'] . '/?tree=reload&pageid=' . $data['pageid']);
			} else {
				$this->composeTransactionErrorMessage($this->Page->_errors);
			}
			
		}
		
		$this->view->assign('Form',$form);
						
	}
	
	/**
	 * Редактирование страницы
	 * 
	 * @return void
	 */
		
	public function editAction() {
		
		if(isset($this->_params['pageid']) && $PageInfo = $this->Page->getPageInfo($this->_params['pageid'])) {
			
			$form = $this->Page->getPageForm('edit');
		
			$form->setDefaults($PageInfo);
			
			if($this->_request->isPost()) {
				
				if($form->isValid($this->_request->getPost()) && $data = $this->Page->savePageForm($form,$PageInfo['pageid'])) {
					return $this->composeSuccessMessage('Изменения внесены', '/control/' . $this->_params['controller'] . '/?tree=reload&pageid=' . $data['pageid']);
				} else {
					$this->composeTransactionErrorMessage($this->Page->_errors);
				}
				
			}
			
			$this->view->assign('Form',$form);
			
		} else {
			
			return $this->composeErrorMessage('Страница с указанным Id не найдена','/control/' . $this->_params['controller'] . '/');
			
		}
						
	}
	
	/**
	 * Удаление страницы
	 * 
	 * @return void
	 */
		
	public function deleteAction() {
		
		if(isset($this->_params['pageid']) && $PageInfo = $this->Page->getPageInfo($this->_params['pageid'])) {
			
			if($this->Page->deletePage($PageInfo)) {
				return $this->composeSuccessMessage('Выбранная страница удалена', '/control/' . $this->_params['controller'] . '/?tree=reload&pageid=0');
			} else {
				return $this->composeErrorMessage('Не удалось удалить страницу', '/control/' . $this->_params['controller'] . '/');
			}
			
		} else {
			
			return $this->composeErrorMessage('Страница с указанным Id не найдена','/control/' . $this->_params['controller'] . '/');
			
		}
						
	}
	
	/**
	 * Генерация идентификатора страницы
	 * 
	 * @return void
	 */
		
	public function generateAction() {

		if($this->_request->isXmlHttpRequest() && isset($this->_params['txt'])) {
			
			$this->_helper->json($this->Page->getUidGenerated($this->_params['txt']));
			
		} else {
			
			die('error');
			
		}
		
	}
	
}